package com.xxxx.service;

import com.xxxx.entity.User;
import com.xxxx.entity.vo.MessageModel;
import com.xxxx.mapper.UserMapper;
import com.xxxx.util.GetSqlSession;
import com.xxxx.util.StringUtil;
import org.apache.ibatis.session.SqlSession;

/**
 * 业务逻辑
 */
public class UserService {
    /**登录服务
         1.参数的非空判断
            如果参数为空
                将状态码、提示信息、回显数据设置到消息模型中，返回消息模型对象
         2.调用dao层的查询方法，通过用户名去查询用户对象
         3.判断用户对象是否为空
            如果为空，将状态码、提示信息、回显数据设置到消息模型中，返回消息模型对象
         4.判断数据库中查询到的用户密码与前台传递来的密码作比较
            如果不相等，将状态码、提示信息、回显数据设置到消息模型中，返回消息模型对象
         5.登陆成功，将成功状态、提示信息、用户对象设置消息模型对象，并return
     * @param uname
     * @param upwd
     * @return
     */
    public MessageModel userLogin(String uname, String upwd) {
        MessageModel messageModel = new MessageModel();

        User u = new User();
        u.setUserName(uname);
        u.setUserPwd(upwd);

        messageModel.setObject(u);

        //参数的非空判断
        if (StringUtil.isEmpty(uname)||StringUtil.isEmpty(upwd)){
            //将状态码、提示信息、回显数据设置到消息模型中，返回消息模型对象
            messageModel.setCode(0);
            messageModel.setMsg("用户姓名和密码不能为空！");
            return messageModel;
        }

        //调用dao层的查询方法，通过用户名去查询用户对象
        SqlSession session1 = GetSqlSession.createsqlSession();
        UserMapper userMapper1 = session1.getMapper(UserMapper.class);
        User user = userMapper1.queryUserByName(uname);
        //判断用户对象是否为空
        if (user == null){
            //将状态码、提示信息、回显数据设置到消息模型中，返回消息模型对象
            messageModel.setCode(0);
            messageModel.setMsg("用户不存在！");
            return messageModel;
        }

        //判断数据库中查询到的用户密码与前台传递来的密码作比较
        if (!upwd.equals(user.getUserPwd())){
            //如果不相等，将状态码、提示信息、回显数据设置到消息模型中，返回消息模型对象
            messageModel.setCode(0);
            messageModel.setMsg("用户密码错误！");
            return messageModel;
        }

        //登录成功，将用户信息设置到消息模型中
        messageModel.setObject(user);

        return messageModel;
    }

    /**注册服务
     1.参数的非空判断
        如果参数为空
            将状态码、提示信息、回显数据设置到消息模型中，返回消息模型对象
     2.调用dao层的查询方法，通过用户名去查询用户对象
     3.判断用户对象是否为空
        如果不为空，将状态码、提示信息、回显数据设置到消息模型中，返回消息模型对象
        如果为空，将参数插入到数据库中
     4.注册成功，将成功状态、提示信息、用户对象设置消息模型对象，并return
     * @param uname
     * @param upwd
     * @param uage
     * @return
     */
    public MessageModel userRegister(String uname, String upwd,Integer uage) {
        MessageModel messageModel = new MessageModel();

        User u = new User();
        u.setUserName(uname);
        u.setUserPwd(upwd);
        u.setUserAge(uage);

        messageModel.setObject(u);

        //参数的非空判断
        if (StringUtil.isEmpty(uname)||StringUtil.isEmpty(upwd)){
            //将状态码、提示信息、回显数据设置到消息模型中，返回消息模型对象
            messageModel.setCode(0);
            messageModel.setMsg("用户姓名和密码不能为空！");
            return messageModel;
        }

        //调用dao层的查询方法，通过用户名去查询用户对象
        SqlSession session = GetSqlSession.createsqlSession();
        UserMapper userMapper = session.getMapper(UserMapper.class);
        User user = userMapper.queryUserByName(uname);
        //判断用户对象是否为空
        if (user != null){
            //将状态码、提示信息、回显数据设置到消息模型中，返回消息模型对象
            messageModel.setCode(0);
            messageModel.setMsg("用户已存在！");
            return messageModel;
        }
        else{
            //调用dao层的插入数据方法将user对象插入数据库中
            userMapper.addUser(u);
            session.commit(); //手动执行提交事件,防止回滚导致插入失败
        }

        //注册成功，将用户信息设置到消息模型中
        messageModel.setObject(u);

        return messageModel;
    }
}
